package com.koron.car.web.carledger.mapper;

import com.koron.car.web.carledger.bean.query.CarQuery;
import com.koron.car.web.carledger.bean.vo.CarVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * (Car)表数据库访问层
 *
 * @author twcao
 * @since 2022-02-26 11:46:50
 */
public interface CarMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    CarVO queryById(@Param("id") String id);

    /**
     * 根据车牌号查询车辆
     *
     * @param plateNum
     * @return
     */
    CarVO queryByPlateNum(@Param("plateNum") String plateNum);

    /**
     * 校验车辆信息录入可行性
     *
     * @param frame
     * @return
     */
    List<CarVO> queryCheckOnly(@Param("frame") String frame,@Param("plateNum") String plateNum);

    /**
     * 根据定编号查询车辆
     *
     * @param limitNum
     * @return
     */
    CarVO queryByLimitNum(@Param("limitNum") String limitNum);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param car 实例对象
     * @return 对象列表
     */
    List<CarVO> queryList(CarQuery car);

    List<CarVO> getBoundCar(CarQuery car);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param list List<Car> 实例对象列表
     * @return 影响行数
     */
    int saveOrUpdate(CarVO list);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(String id);

    /**
     * 通过主键逻辑删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int hiddenById(String id);

    /**
     * 更新车辆状态
     *
     * @param carId
     * @param state
     * @return
     */
    int updateState(@Param("carId") String carId, @Param("state") String state);

    int updateDistance(@Param("carId") String carId, @Param("yearDistance") Double yearDistance, @Param("totalDistance") Double totalDistance);

    int unboundDelimitNum(@Param("prepareType") String prepareType, @Param("prepareNumber") List<String> prepareNumber);

    int countCarByPrepareType(@Param("prepareType") String prepareType);
}

